March 08, 2021
(-), 밑줄(_) 로만 작성
컴포넌트파일이나 각종 훅들을 종종 대문자로 시작하는 경우가 있었는데, 모두 수정해야겠다.. 사실상 이것도 일정하지않고 어떤건 소문자 어떤건 대문자 이러긴 했음..
한줄은 생략해도 된다는 말도 있는걸 보면 좀 케바케인듯..?
if (true) doSomething()if (true) {
doSomething()
}가독성을 위해서라면 한줄 띄어쓰는것이 좋은듯?
switch (animal) {
case Animal.BANDERSNATCH:
handleBandersnatch()
break
case Animal.JABBERWOCK:
handleJabberwock()
break
default:
throw new Error('Unknown animal')
}근데 사실상 이 문제는,
.의 위치가 잘못되면 어차피 에러발생이라 어느정도 수준까지의 체인이 적당한지가 관점일듯 함..
const leds = stage
.selectAll('.led')
.data(data)
.enter()
.append('svg:svg')
.classed('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led)한 줄이 80자를 넘기면 안된다.
이것을 기준으로 위의 메소드체인도 컷팅하면 될 듯 하다.
각 구문사이는 줄 공백을 주는것이 좋다.
const a = 1
const b = 3모든 변수는 상단에 위치해야 보기 편할거라 생각해왔었는데, 그것이 아니라 사용하는 부분 바로 전에 입력하는게 보기 좋다고 한다.. 아아…
function(hasName){
const name = getName();
if(!hasName){
return false;
}
this.setFirstName(name);
return true;
}function(hasName){
if(!hasName){
return false;
}
const name = getName();
this.setFirstName(name);
return true;
}const를 먼저 묶고, let을 묶어준다.let i
const items = getItems()
let dragonball
const goSportsTeam = true
let lenconst goSportsTeam = true
const items = getItems()
let dragonball
let i
let length객체에 있어서 속성은 어떠한 경우에도 이후 추가되는것이 아닌, 초기에 생성되어있어야 하는것 같음
function getKey(k) {
return `a key named ${k}`
}
const obj = {
id: 5,
name: 'San Francisco',
}
obj[getKey('enabled')] = truefunction getKey(k) {
return `a key named ${k}`
}
const obj = {
id: 5,
name: 'San Francisco',
[getKey('enabled')]: true,
}아니면 함수 선언식 사용?
또한, 기본값을 갖고있는 파라미터를 뒤쪽으로 미뤄둔다.
function handleThings(opts) {
opts = opts || {}
}
function handleThings(opts) {
if (opts === void 0) {
opts = {}
}
}function handleThings(opts = {}) {
// ...
}
function handleThings(val, opts = {}) {
// ...
}사이드 이펙트가 발생할 수 있는 파라미터의 기본값 사용을 지양한다.
사이드 이펙트 : 외부영역에 영향을 주는 것. 필요하다면 클로저 사용
사이드 이펙트는 좀 더 다뤄볼 예정
var b = 1
function count(a = b++) {
console.log(a)
}
count() // 1
count() // 2
count(3) // 3
count() // 3헐..
this.__firstName__ = 'Panda'
this.firstName_ = 'Panda'
this._firstName = 'Panda'this.firstName = 'Panda'this 는 변수의 값으로 사용하지 않으며, 필요하다면 화살표 함수로 작성한다.
가독성을 위해 축약문은 모두 대문자로 표기한다.
const HttpRequests = nullconst HTTPRequests = nullexport되는 파일 내 모든 상수(const) 는 모두 대문자로 표기한다.export const Test_Variable = nullexport const TEST_VARIABLE = nulllet del_notes = ['one', 'two']let delivery_note_list = ['one', 'two']export를 제외한 변수, 상수, 함수, 객체의 경우 lowerCamelCase로 표기한다습관적으로 많이 사용하지만, 성능, 디버깅 유지보수 가독성에 부정적인 영향을 주기 때문에 피해야 하는 패턴들이다.
객체에서는 상관없지만 배열의 경우 delete를 사용하더라도 undefined로 공간을 차지하고 있는 상태이기 때문에, splice메소드를 사용하는것이 좋다.
querySelector와 같은 돔을 탐색할 때, 동일한 돔을 여러번 탐색하는것은 성능 저하를 유발하기 때문에 캐싱하는것이 좋다.
const className = document.getElementById('result').className
const clientHeight = document.getElementById('result').clientHeight
const scrollTop = document.getElementById('result').scrollTop
document.getElementById('result').blur()const el = document.getElementById('result')
const { className, clientHeight, scrollTop } = el
el.blur()innerHTML이나 appendChild메소드는 사용할 때마다 돔 변경이 발생한다. 돔 변경은 할 때마다 비용이 들기 때문에, 한번에 일괄 해주는것이 좋다.
myBookmarks.forEach(bookmark => {
el.innerHTML += `<li><a href="${bookmark.url}">${bookmark.name}</a></li>`
})const html = myBookmarks
.map(bookmark => `<li><a href="${bookmark.url}">${bookmark.name}</a></li>`)
.join('')
el.innerHTML = html바닐라 자바스크립트 뿐만 아니라 React와 같은 경우도 인라인으로 함수를 작성하는 것이 아닌, useCallback으로 메소드를 선언하고 그 메소드만 묶어준다.
VScode의 prettier를 사용하면 세미콜론이나 디스트럭처링 내 띄어쓰기 등 작은 부분들은 저장할 때 일 괄 수정해주는 좋은 모듈? 이 있더라 !